单点登录的两种实现方式
概念
单点登录(Single Sign-On,SSO)是一种身份验证机制,允许用户使用一个账户登录多个系统,而不需要为每个系统创建单独的账户。
实现方式
认证中心模式
认证中心模式是单点登录模式的一种实现方式,其原理是:
- 用户访问系统A时,如果未登录,则重定向到认证中心;
- 用户在认证中心登录,认证中心会生成一个令牌,并返回给用户,相应的登录状态也会存在数据库中;
- 然后用户在后续访问系统A、系统B、系统C时,会携带上这个令牌,然后各系统会使用这个令牌请求认证中心进行验证。
- 认证中心会使用这个令牌查询数据库,并将登录状态返回给各系统。
- 各系统会根据认证中心返回的登录状态,决定是否需要跳转到认证中心登录页。
mermaid
sequenceDiagram
autoNumber
participant U as 用户
participant S as 各系统
participant Auth as 认证中心
U ->>+ S: 访问系统
S ->>- U: 重定向到认证中心
U ->>+ Auth: 登录
Auth ->>- U: 返回令牌
U ->>+ S: 携带令牌访问各系统
S ->>+ Auth: 携带令牌请求认证中心
Auth ->>- S: 返回登录状态
alt 登录状态正常
S ->> U: 正常访问
else 登录状态异常
S ->>- U: 重定向到认证中心登录页
end优点:
- 可以对用户的登录状态进行实时管理,当在用户登录状态发生改变时,各系统能实时做出反应;
缺点:
- 认证中心需要处理大量来自各系统的请求,对性能要求较高;
双token模式
双token模式是单点登录模式的一种实现方式,其原理是:
- 用户访问系统A时,如果未登录,则重定向到认证中心;
- 用户在认证中心登录,认证中心会生成一个长时效令牌和一个短时效令牌,并返回给用户,相应的登录状态也会存在数据库中;
- 然后用户在后续访问系统A、系统B、系统C时,会携带上短时效令牌;
- 然后各系统会在自己本地对这个令牌进行解密,并验证令牌是否有效;
- 如果令牌有效,则各系统会认为用户已登录,让用户正常访问。
- 如果令牌无效,则各系统会认为用户未登录,让用户重定向到认证中心登录页。
- 由于短时效令牌的时效性较短,所以前端会每隔一段时间,会使用长时效令牌主动请求认证中心,获取最新的短时效令牌。
- 认证中心会使用长时效令牌查询数据库,确定还处于登录状态,则更新短时效令牌,并返回给前端。
- 如果长时效令牌无效,则认为用户已退出登录,让用户重定向到认证中心登录页。
- 同时,为了保证各系统能正常解密短时效令牌,认证中心会将解密秘钥同步给各系统。
mermaid
sequenceDiagram
autoNumber
participant U as 用户
participant S as 各系统
participant Auth as 认证中心
U ->>+ S: 访问系统
S ->>- U: 重定向到认证中心
U ->>+ Auth: 登录
Auth ->>- U: 返回长时效令牌和短时效令牌
Auth ->> S: 同步解密秘钥
U ->>+ S: 携带短时效令牌访问各系统
S ->> S: 解密短时效令牌,获取登录状态
alt 登录状态正常
S ->> U: 正常访问
else 登录状态异常
S ->>- U: 重定向到认证中心登录页
end
Note over U: 短时效令牌过期
U ->>+ Auth: 使用长时效令牌请求认证中心
Auth ->>- U: 返回短时效令牌
U ->> S: 携带短时效令牌访问各系统……优点:
- 认证中心只需要处理少量的请求,对性能要求较低;
缺点:
- 对登录状态的控制能力较差,需要等待短时效令牌过期后,才能让用户退出登录;